package pe.edu.upc.e41a.javasoft.service;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.upc.e41a.javasoft.dao.TipoPersonaDao;
import pe.edu.upc.e41a.javasoft.domain.TipoPersona;


@Service
@Transactional
public class TipoPersonaServiceImpl implements TipoPersonaService {
	
	@Resource
	private TipoPersonaDao tipoPersonaDao;

	@Override
	public String insertarTipoPersona(TipoPersona tipoPersona) {
		String mensaje =null;
		try {
			tipoPersonaDao.saveTipoPersona(tipoPersona);
			mensaje="El tipo de persona: "+tipoPersona.getDescripcion() +" se registró exitosamente";
		} catch (Exception e) {
			mensaje="Error al registrar el tipo de persona";
			return mensaje;
		}
		return mensaje;
	}

	@Override
	public String actualizarTipoPersona(TipoPersona tipoPersona) {
		String mensaje =null;
		try {
			tipoPersonaDao.updateTipoPersona(tipoPersona);
			mensaje="El tipo de persona se actualizó exitosamente";
		} catch (Exception e) {
			mensaje="Error al actualizar el tipo de persona";
			return mensaje;
		}
		return mensaje;
	}

	@Override
	public String eliminarTipoPersona(TipoPersona tipoPersona) {
		String mensaje =null;
		try {
			tipoPersonaDao.deleteTipoPersona(tipoPersona);
			mensaje="El tipo de persona se eliminó exitosamente";
		} catch (Exception e) {
			mensaje="Error al eliminar el tipo de persona";
			return mensaje;
		}
		return mensaje;
	}

	@Override
	public long contarTipoPersonas() {
		return tipoPersonaDao.countTipoPersonas();
	}

	@Override
	public List<TipoPersona> buscarTodoTipoPersonas() {
		return tipoPersonaDao.findAllTipoPersonas();
	}

	@Override
	public TipoPersona buscarTipoPersonaPorCodigo(Integer codigo) {
		return tipoPersonaDao.findTipoPersona(codigo);
	}

	@Override
	public TipoPersona buscarTipoPersonasPorDescripcionExacta(String descripcion) {
		TypedQuery<TipoPersona> tipoPersona = tipoPersonaDao.findTipoPersonasByDescripcionEquals(descripcion);
		TipoPersona tipoPersonaresultado = tipoPersona.getSingleResult();
		return tipoPersonaresultado;
	}

	@Override
	public List<TipoPersona> buscarTipoPersonasPorDescripcionParecida(
			String descripcion) {
		TypedQuery<TipoPersona> tipoPersona =tipoPersonaDao.findTipoPersonasByDescripcionEquals(descripcion);
		List<TipoPersona> tipoPersonaresultado =tipoPersona.getResultList();
		return tipoPersonaresultado;
	}

	
}
